#include <stdio.h>

// 假设下位机发来数据data：                    0x12344520
//                           0001 0010 0011 0100 0100 0101 0010 0000
#define TEMP_MASK 0x000000FF // 0000 0000 0000 0000 0000 0000 1111 1111 
#define HUMI_MASK 0x0000FF00 // 0000 0000 0000 0000 1111 1111 0000 0000 
#define DOOR_MASK 0x000F0000 // 0000 0000 0000 1111 0000 0000 0000 0000
#define LIGT_MASK 0x00F00000 // 0000 0000 1111 0000 0000 0000 0000 0000

// 假设下位机发来数据data：                    0x12344520
//                           0001 0010 0011  0100  0100 0101 0010 0000
#define DOOR_1 0x00080000 // 0000 0000 0000  1000  0000 0000 0000 0000
#define DOOR_2 0x00040000 // 0000 0000 0000  0100  0000 0000 0000 0000
#define DOOR_3 0x00020000 // 0000 0000 0000  0010  0000 0000 0000 0000
#define DOOR_4 0x00010000 // 0000 0000 0000  0001  0000 0000 0000 0000

#define LIGT_1 0x00800000 // 0000 0000 0000  1000  0000 0000 0000 0000
#define LIGT_2 0x00400000 // 0000 0000 0000  1000  0000 0000 0000 0000
#define LIGT_3 0x00200000 // 0000 0000 0000  1000  0000 0000 0000 0000
#define LIGT_4 0x00100000 // 0000 0000 0000  1000  0000 0000 0000 0000


int main(int argc, char const *argv[])
{
    unsigned data;

    while(1)
    {
        scanf("%x", &data);

        printf("温度: %u°C\n", (data&TEMP_MASK) >> 0);
        printf("湿度: %u%%\n", (data&HUMI_MASK) >> 8);

        printf("门1: %s\n", (data&DOOR_1) ? "开":"关" );
        printf("门2: %s\n", (data&DOOR_2) ? "开":"关" );
        printf("门3: %s\n", (data&DOOR_3) ? "开":"关" );
        printf("门4: %s\n", (data&DOOR_4) ? "开":"关" );
        
        printf("灯1: %s\n", (data&LIGT_1) ? "开":"关" );
        printf("灯2: %s\n", (data&LIGT_2) ? "开":"关" );
        printf("灯3: %s\n", (data&LIGT_3) ? "开":"关" );
        printf("灯4: %s\n", (data&LIGT_4) ? "开":"关" );//0x12344520
    }

    return 0;
}
